/*     */ package com.zimbra.cs.imap;
/*     */ 
/*     */ import com.zimbra.common.localconfig.KnownKey;
/*     */ import com.zimbra.common.localconfig.LC;
/*     */ import com.zimbra.common.util.ByteUtil;
/*     */ import java.io.File;
/*     */ import java.io.FileInputStream;
/*     */ import java.io.FileOutputStream;
/*     */ import java.io.IOException;
/*     */ import java.io.ObjectInputStream;
/*     */ import java.io.ObjectOutputStream;
/*     */ import java.util.Arrays;
/*     */ import java.util.Comparator;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ final class DiskImapCache
/*     */   implements ImapSessionManager.Cache
/*     */ {
/*  39 */   private static final String CACHE_DATA_SUBDIR = "data" + File.separator + "mailboxd" + File.separator + "imap" + File.separator + "cache";
/*     */   
/*  41 */   private static final File CACHE_DIR = new File(LC.zimbra_home.value(), CACHE_DATA_SUBDIR);
/*     */   private static final String IMAP_CACHEFILE_SUFFIX = ".i4c";
/*     */   
/*     */   DiskImapCache() {
/*  45 */     CACHE_DIR.mkdirs();
/*     */     
/*     */ 
/*  48 */     File[] allCached = CACHE_DIR.listFiles();
/*  49 */     Arrays.sort(allCached, new Comparator() {
/*     */       public int compare(File o1, File o2) {
/*  51 */         return o1.getName().compareTo(o2.getName());
/*     */       }
/*  53 */     });
/*  54 */     File previous = null;
/*  55 */     String lastOwner = "";String lastId = "";
/*  56 */     for (File cached : allCached) {
/*  57 */       String split = ImapSessionManager.isActiveKey(cached.getName()) ? "_" : ":";
/*  58 */       String[] parts = cached.getName().split(split);
/*  59 */       if ((previous != null) && (parts.length >= 4)) {
/*  60 */         if ((lastOwner.equals(parts[0])) && (lastId.equals(parts[1]))) {
/*  61 */           previous.delete();
/*     */         } else {
/*  63 */           removeSessionFromFilename(previous);
/*     */         }
/*     */       }
/*  66 */       lastOwner = parts[0];lastId = parts[1];
/*  67 */       previous = cached;
/*     */     }
/*  69 */     removeSessionFromFilename(previous);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */   private static void removeSessionFromFilename(File file)
/*     */   {
/*  77 */     if (file == null) {
/*  78 */       return;
/*     */     }
/*  80 */     String filename = file.getName();
/*  81 */     if (filename.contains("+")) {
/*  82 */       file.renameTo(new File(CACHE_DIR, filename.substring(0, filename.lastIndexOf("+")) + ".i4c"));
/*     */     }
/*     */   }
/*     */   
/*     */   public void put(String key, ImapFolder folder)
/*     */   {
/*  88 */     File pagefile = new File(CACHE_DIR, key + ".i4c");
/*  89 */     if (pagefile.exists()) {
/*  90 */       return;
/*     */     }
/*  92 */     FileOutputStream fos = null;
/*  93 */     ObjectOutputStream oos = null;
/*     */     try {
/*  95 */       oos = new ObjectOutputStream(fos = new FileOutputStream(pagefile));
/*  96 */       synchronized (folder) {
/*  97 */         oos.writeObject(folder);
/*     */       }
/*     */     } catch (IOException e) {
/* 100 */       ByteUtil.closeStream(oos);
/* 101 */       ByteUtil.closeStream(fos);
/* 102 */       pagefile.delete();
/*     */     } finally {
/* 104 */       ByteUtil.closeStream(oos);
/* 105 */       ByteUtil.closeStream(fos);
/*     */     }
/*     */   }
/*     */   
/*     */   public ImapFolder get(String key)
/*     */   {
/* 111 */     File pagefile = new File(CACHE_DIR, key + ".i4c");
/* 112 */     if (!pagefile.exists()) {
/* 113 */       return null;
/*     */     }
/* 115 */     FileInputStream fis = null;
/* 116 */     ObjectInputStream ois = null;
/*     */     try
/*     */     {
/* 119 */       ois = new ObjectInputStream(fis = new FileInputStream(pagefile));
/* 120 */       return (ImapFolder)ois.readObject();
/*     */     } catch (Exception e) {
/* 122 */       ByteUtil.closeStream(ois);
/* 123 */       ByteUtil.closeStream(fis);
/* 124 */       pagefile.delete();
/* 125 */       return null;
/*     */     } finally {
/* 127 */       ByteUtil.closeStream(ois);
/* 128 */       ByteUtil.closeStream(fis);
/*     */     }
/*     */   }
/*     */   
/*     */   public void remove(String key)
/*     */   {
/* 134 */     File pagefile = new File(CACHE_DIR, key + ".i4c");
/* 135 */     pagefile.delete();
/*     */   }
/*     */   
/*     */   public void updateAccessTime(String key) {}
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/imap/DiskImapCache.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */